package org.micode.common.logtrace;

import org.micode.common.utils.StringExtUtils;
import org.micode.common.consts.HttpHeadConsts;
import org.slf4j.MDC;

import java.util.UUID;

public class LogTracer {

    public static void setTraceId(String logTraceId) {
        try {
            // 添加请求ID(logRequestId), 用于日志跟踪，这个id将直接在log的配置文件中配置使用
            // 另外，将通过http或这mq的请求向下一个服务传递，确保实现跨服务日志跟踪处理
            // MDC加入的值与线程相关
            // 日志配置文件中使用: [%X{logRequestId}]
            // HTTP 中通过 head 中添加 logRequestId 处理
            // MQ 中通过加入 logRequestId 处理
            String logRequestId = logTraceId;
            if (StringExtUtils.isEmpty(logRequestId)) {
                logRequestId = String.valueOf(UUID.randomUUID());
            }

            MDC.put(HttpHeadConsts.REQUEST_HEADER_REQUESTID_KEY, logRequestId);
        } catch (Exception ignore) {
            ;
        }
    }

    public static String getTraceId() {
        return MDC.get(HttpHeadConsts.REQUEST_HEADER_REQUESTID_KEY);
    }

    public static void setTraceId() {
        setTraceId(null);
    }

    public static void clearTraceId() {
        try {
            MDC.clear();
        } catch (Exception ignore) {
            ;
        }
    }

}
